<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>7.WeakMap的语法使用</title>
</head>

<body>
  <div>hdcms</div>
  <div>houdunren.com</div>
  <script>
    /*- 键名必须是对象,和WeakSet类似，
    - WeaMap对键名是弱引用的，键值是正常引用
    - 垃圾回收不考虑WeaMap的键名，不会改变引用计数器，键在其他地方不被引用时即删除
    - 因为WeakMap 是弱引用，由于其他地方操作成员可能会不存在，所以不可以进行forEach( )遍历等操作
    - 也是因为弱引用，WeaMap 结构没有keys( )，values( )，entries( )等方法和 size 属性
    - 当键的外部引用删除时，希望自动删除数据时使用 WeakMap
    */
    //以下操作由于键不是对象类型将产生错误
    //new WeakSet("hdcms"); //TypeError: Invalid value used in weak set

    //dom 是对象，可以用WeakMap 操作
    let divs = document.querySelectorAll('div');
    let map = new WeakMap();
    divs.forEach(item => {
      map.set(item, item.innerHTML);
    });
    console.log(map);
    let arr = [];
    map = new WeakMap();
    map.set(arr,"hdcms.com");
    //是否包含
    console.log(map.has(arr)); //true
    console.log(map);//WeakMap {Array(0) => 'hdcms.com'}
    //删除
    map.delete(arr);
    console.log(map);//WeakMap {}
  </script>
</body>

</html>